www.gusucode.com > matlab神经网络原理与实例精解 本书源文件 > 第13章 神经网络应用实例/径向基网络预测地下水位/rbf_underwater.m
% rbf_underwater.m %% 清理工作空间 clear,clc close all %% 定义输入数据 % 输入 x = [ 1.5, 1.8, 4.0, 13.0, 5.0, 9.0, 10.0, 9.0, 7.0, 9.5, 5.5, 12.0,... 1.5, 3.0, 7.0, 19.0, 4.5, 8.0, 57.0, 35.0, 39.0, 23.0, 11.0, 4.5; -10.0, -10.0, -2.0, 10.0, 17.0, 22.0, 23.0, 21.0, 15.0, 8.5, 0, -8.5,... -11.0, -7.0, 0, 10.0, 18.0, 21.5, 22.0, 19.0, 13.0, 6.0, 1.0, -2.0; 1.2, 2.0, 2.5, 5.0, 9.0, 10.0, 8.0, 6.0, 5.0, 5.0, 6.2, 4.5,... 2.0, 2.5, 3.0, 7.0, 10.0, 11.0, 5.5, 5.0, 5.0, 3.0, 2.0, 1.0; 1.0, 1.0, 6.0, 30.0, 18.0, 13.0, 29.0, 74.0, 21.0, 15.0, 14.0, 11.0,... 1.0, 2.0, 4.0, 0, 19.0, 81.0, 186.0, 114.0, 60.0, 35.0, 4.0, 6.0; 1.2, 0.8, 2.4, 4.4, 6.3, 6.6, 5.6, 4.6, 2.3, 3.5, 2.4, 0.8,... 1.3, 1.3, 4.1, 3.2, 6.5, 7.7, 5.5, 4.6, 3.6, 2.6, 1.7, 1.0 ]; y = [6.92, 6.97, 6.84, 6.5, 5.75, 5.54, 5.63, 5.62, 5.96, 6.3, 6.8, 6.9,... 6.7, 6.77, 6.67, 6.33, 5.82, 5.58, 5.48, 5.38, 5.51, 5.84, 6.32, 6.56]; %% 划分训练数据与测试数据 % 训练输入向量 trainx = x(:, 6:24); % 训练样本对应的输出 trainy = y(6:24); % 测试输入向量 testx = x(:,1:5); % 测试样本对应的输出 testy = y(1:5); %% 对训练样本做插值 % 训练样本的个数 N = size(trainx, 2); X = [trainx; trainy]; % 网格 [xx0, yy0] = meshgrid(1:N, 1:6); [xx1,yy1] = meshgrid(linspace(1,N,100), 1:6); % 使用interp2函数做二维三次插值 XX = interp2(xx0, yy0, X, xx1, yy1, 'cubic'); % 形状复原 trainx = XX(1:5, :); trainy = XX(6, :); %% 创建网络 % 误差容限 er = 1e-8; % 扩散因子 spread = 22; % 神经元个数 N = 101; net = newrb(trainx, trainy, er, spread, N); %% 测试 yy = net(testx); %% 计算、显示相对误差 e = (testy - yy)./testy; fprintf('相对误差: \n '); fprintf('%f ', e); fprintf('\n\n'); % 平均相对误差 m = mean( abs(e) ); fprintf('平均相对误差: \n %f\n', m); % 最大相对误差 ma = max(abs(e)); fprintf('最大相对误差: \n %f\n', ma); % 显示实际值与拟合值 figure(1) plot(1:5, testy, 'bo-') hold on plot(1:5, yy, 'r*-') title('地下水测试结果') legend('真实值', '预测值') axis([1,5,0,8]) % 显示残差 figure(2) plot(1:5, abs(testy - yy), '-o') title('残差') axis([1,5,0,0.3])